<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //构造函数模式用于定义实例属性，而原型模式用于定义方法和共享的属性。结果，每个实例都会有自己的一份实例属性的副本，但同时又共享着对方法的引用，最大限度地节省了内存
//          另外，这种混成模式还支持向构造函数传递参数；可谓是集两种模式之长
        //构造模式---用来制造实例的单独属性
        //原型模式---用来完成实力们共同使用的方法和属性[共有属性]

        //构造模式
        function Student (name,age){
            this.name=name;
            this.age=age;
            this.girls=["久久","美杜莎"];
            this.say=function(){
                console.log(this.girls);
            }
        }
        //原型模式
        function Student1(){

        }
        Student1.prototype={
            constructor:Student1,
            name:"你好",
            age:18,
            say:function(){
                console.log(this.girls);
            }
        }
        //组合模式---
        //注意点对于对象内后期需要修改的引用类型的继承的值,
        //这个值以构造函数的this.属性名称的方式来实现继承,
        //这样可以避免某个示例操作继承来的对象而引起其他实例的变化[原型链的道理]
        function Student2 (name,age){
            this.name=name;
            this.age=age;
            this.girls=["久久","美杜莎"];
        }
        Student2.prototype={
            constructor:Student2,
            say:function(){
                console.log(this.girls);
            }
        }
        var stu1=new Student2("小风",12);
        var stu2=new Student2("小宏",12);
    </script>
</body>
</html>



